const http = require("http");
const methods = require("methods"); // 幽灵依赖，因为安装了 express express中会安装这个包。
const Router = require("./router");

// 我们以前是默认创建应用的时候，就提供一个路由系统

function Application() {
  // 每个应用都配置一个路由表
}
Application.prototype.lazy_route = function () {
  if (!this.router) {
    this.router = new Router();
  }
};
// 用户真正的创建了服务 在开始创建路径
methods.forEach((method) => {
  Application.prototype[method] = function (path, ...handlers) {
    this.lazy_route();
    this.router[method](path, handlers);
  };
});
Application.prototype.use = function () {
  this.lazy_route();
  this.router.use(...arguments);
};

Application.prototype.listen = function (...args) {
  this.lazy_route();
  const server = http.createServer((req, res) => {
    function done() {
      res.end(`my Cannot ${req.method.toLowerCase()} ${req.url}`);
    }
    this.router.handle(req, res, done);
    // done(); // 应用如果发现路由无法处理，那就自己报一个找不到
  });
  server.listen(...args);
};
module.exports = Application;
